Pandas 实战系列:几行代码搞定组内占比

您所在的位置:网站首页 javastream流分组 占比 Pandas 实战系列:几行代码搞定组内占比

Pandas 实战系列:几行代码搞定组内占比

2023-04-06 12:35| 来源: 网络整理| 查看: 265

前言

分组占比问题一直是工作及面试的高频问题,有经验的小伙伴想必不会陌生;在实际应用场景下多数是使用数据库窗口函数解决,本文将介绍如何使用pandas处理这类问题。需要说明的是,本文主要是思路的分享,所以构造了简单的数据,实际工作中可能面对比较复杂的数据,比如多字段重复,那么要求我们根据实际业务需求先进行数据清洗,但无论多么复杂的场景,思路是一样的。

正文

1、需求及问题

现有一张区域销售数据表,要求按月维度计算各个区域销售额在整个月销售额中的占比,最后按月输出结果到不同的sheet中,数据表样式如下:

原数据

2、解决思路

根据要求,按月维度聚合销售额,然后求各区域销售额在总销售额中的占比;然后把结果按月写入excel不同的sheet中,思路很简单,下面直接上代码。

3、实战代码

import pandas as pd import numpy as np df=pd.read_excel('C:/Users/young/Desktop/分组占比.xlsx',sheet_name=0)#读取数据 df['月份']=pd.to_datetime(df['日期']).dt.month #把日期转为'月' df.set_index('月份',inplace=True) #把'月份'设为索引 #计算占比同时格式化输出(保留两位小数并以%显示) df['分组占比'] = (100*df['销售额']/df['销售额'].sum(level = '月份')).round(2).map('{}%'.format)

代码写到这,该需求已经基本完成了,让我们看看实际的效果吧:

下面是最后一步,按月输出到不同的sheet:

df.reset_index(inplace=True) #因为我们需要按月份写入,所以需要重置索引 month_num=df['月份'].unique() writer=pd.ExcelWriter(r'C:/Users/young/Desktop/分组占比.xlsx',datetime_format='YYYY-MM-DD') for i in month_num: temp=df[df['月份'].isin([i])] temp.to_excel(writer,sheet_name=str(i)+'月',index=False) writer.save() writer.close()

来看看效果:

以上,如果觉得有点用,请记得点赞关注,谢谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3